load("@aspect_rules_js//js:defs.bzl", "js_library", "js_test")
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_shared_library")
load("@rules_rust//wasm_bindgen/rules_js:defs.bzl", "js_rust_wasm_bindgen")

package(default_visibility = ["//visibility:public"])

copy_file(
    name = "hello_world_wasm_test.src",
    src = "//wasm_bindgen:hello_world_wasm_test.js",
    out = "hello_world_wasm_test.js",
)

rust_binary(
    name = "hello_world_bin_wasm",
    srcs = ["//wasm_bindgen:main.rs"],
    edition = "2018",
    deps = [
        "@rules_rust//wasm_bindgen/3rdparty:wasm_bindgen",
    ],
)

rust_shared_library(
    name = "hello_world_lib_wasm",
    srcs = ["//wasm_bindgen:main.rs"],
    edition = "2018",
    deps = [
        "@rules_rust//wasm_bindgen/3rdparty:wasm_bindgen",
    ],
)

js_rust_wasm_bindgen(
    name = "hello_world_bundler_wasm_bindgen",
    wasm_file = ":hello_world_bin_wasm",
)

js_rust_wasm_bindgen(
    name = "hello_world_web_wasm_bindgen",
    target = "web",
    wasm_file = ":hello_world_lib_wasm",
)

js_rust_wasm_bindgen(
    name = "hello_world_deno_wasm_bindgen",
    target = "deno",
    wasm_file = ":hello_world_lib_wasm",
)

js_rust_wasm_bindgen(
    name = "hello_world_nomodules_wasm_bindgen",
    target = "no-modules",
    wasm_file = ":hello_world_lib_wasm",
)

js_rust_wasm_bindgen(
    name = "hello_world_nodejs_wasm_bindgen",
    target = "nodejs",
    wasm_file = ":hello_world_lib_wasm",
)

js_rust_wasm_bindgen(
    name = "hello_world_nodejs_no_typescript_wasm_bindgen",
    bindgen_flags = [
        "--no-typescript",
    ],
    target = "nodejs",
    wasm_file = ":hello_world_lib_wasm",
)

_WASM_DATA = [
    ":hello_world_bundler_wasm_bindgen",
    ":hello_world_deno_wasm_bindgen",
    ":hello_world_nodejs_wasm_bindgen",
    ":hello_world_nomodules_wasm_bindgen",
    ":hello_world_web_wasm_bindgen",
]

js_test(
    name = "hello_world_wasm_direct_test",
    data = _WASM_DATA,
    entry_point = ":hello_world_wasm_test.js",
)

js_library(
    name = "hello_world_wasm_lib",
    srcs = [
        ":hello_world_wasm_test.js",
    ],
    data = _WASM_DATA,
    deps = [],
)

js_test(
    name = "hello_world_wasm_lib_test",
    data = [
        ":hello_world_wasm_lib",
    ],
    entry_point = ":hello_world_wasm_lib",
)
